package cn.tedu.charging.order.quartz;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

/**
 * 钩子函数
 * 以下是个工具类
 * 通过mapper查数据库 ，但是mapper在哪呢？在容器里面
 * Aware是察觉发现的意思
 *
 *
 *
 *SpringContextUtils是钩子函数。  Aware是察觉的意思
 */
@Slf4j
@Component
public class SpringContextUtils implements ApplicationContextAware {
    private static ApplicationContext applicationContext;
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = applicationContext;
    }

    /**
     *可以通过setApplicationContext这个方法，把这个容器这个applicationContext上下文或者把这个对象
     * applicationContext拿过来， 然后可以通过applicationContext这个对象去容器里面创建好的大池子里面
     *通过（clazz）类型 找到一个bean
     *
     *
     * @param clazz
     * @return
     * @param <T>
     */
    //以下是通过类型获取bean    通过类型 从spring容器中获取bean
    public static <T> T getBean(Class<T> clazz) {
        return applicationContext.getBean(clazz);
    }

    //不用容器 也不用传 直接从容器中去拿
    //以下是通过名字获取bean  从spring容器中获取bean

    /**
     * 根据名称获取bean
     * @param name
     * @param clazz
     * @return
     * @param <T>
     */
    public static<T> T getBean(String name,Class<T> clazz){
        return applicationContext.getBean(name,clazz);
    }
}
